package com.hanamaki.oop.demo03;

/**
 * 面向对象中的封装：封装就是 属性的私有 private
 * 属性的私有之后，不能直接访问成员变量（属性），要提供能够操作属性的方法
 * 使用封装的好处：
 *    保护程序的安全
 *    隐藏程序的细节
 *
 *    统一接口
 *    增加系统的可维护性
 */
public class Teacher {

    /**
     * 姓名
     */
    private String name;

    /**
     * 学生编号
     */
    private Integer id;

    /**
     * 学生性别
     */
    private char sex;

    /**
     * 学生年龄
     */
    private Integer age;

    /* 提供一个能够操控(取值（get）、赋值（set）) 属性 age 的公共方法 */
    /* 可以在一个类中使用 alt + insert 来快捷生成 get and  set 方法 */

    /**
     * 取值
     * @return
     */
    public String getName() {
        return name;
    }

    /**
     * 赋值
     * @param name
     */

    public void setName(String name) {
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        if (age < 0 || age > 120) {
            this.age = 18;
        } else {
            this.age = age;
        }
    }

    public Teacher() {
    }

    public Teacher(String name, Integer id, char sex, Integer age) {
        this.name = name;
        this.id = id;
        this.sex = sex;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", sex=" + sex +
                ", age=" + age +
                '}';
    }
}
